A flash memory is an electronic non-volatile digital storage medium that can be electrically erased and reprogrammed. A flash memory typically comprises an array of memory cells made from floating-gate transistors. Technically, the flash memory is a type of EEPROM (electrically erasable programmable read-only memory). One of the reasons for using a Flash memory instead of EEPROM is that it offers much more memory cells per area because a bit-per-bit alterability like in EEPROM is not possible with Flash: it is only possible to erase entire blocks, whereas it is possible to program individual bits. This means that to change some part one first needs to erase the whole block.
Today, flash memories are widely used in, for example, personal computers, PDAs, smartphones, digital cameras, microcontrollers, and many more.
Flash memories typically require special considerations, due to their internal configuration, when performing read access, write access, and/or erase access on data stored or to be stored in flash memories. Furthermore, flash memories may be prone to a relatively high bit error rate (BER), especially after a long storage time (up to several years, possibly even 20 years) that flash memories are designed for. The high bit error rate can be dealt with by means of error correction codes (ECC) in order to calculate redundant data (“checkbits”) and store such redundant data along with the actual data to be stored. These properties of flash memories define some constraints on how a flash memory can be used. In particular, modifying data (even if it is a single bit only) in a flash memory may require copying an entire memory block or sector to another memory block or sector. It would be desired if some of these usage constraints imposed by flash memories could be alleviated, at least.